AWSマネージドサービスで Dify のセルフホスティングを試してみた
こんにちは、森田です。
本記事は Dify Advent Calendar 2024の22日目の記事です。
はじめに
Dify をご存知でしょうか。
Dify とは、オープンソースの LLM アプリ開発基盤となっており、ノーコードで誰でも簡単に LLM アプリを作ることができます。
Dify は、SaaS版を利用することですぐに利用することもできますが、オープンソースプラットフォームであるため、AWSなどのクラウドサービスを使ってセルフホスティングすることも可能です。
「AWSマネージドサービスを可能な限り使って実現できないかな」と調査していたところ、aws-samples
に以下のリポジトリがありました。
dify-self-hosted-on-awsの中身を覗いてみる
引用:https://github.com/aws-samples/dify-self-hosted-on-aws/blob/main/imgs/architecture.png
構成としては上記の通りになっています。
コンピュートは、ECS Fargateを使っているようです。
ベクトルDBについては、Aurora serverelessを使っているようで、先日のアップデート最小キャパシティ0にも対応しているようでした。
ElastiCache のエンジンも Valkey が採用されているなど、AWSマネージドサービスを積極的に活用したアーキテクチャになっています。
また、コストも$53.8/month〜
となっているようで、ランニングコストを抑えたいケースにも合致しそうです。
本記事では、実際にこのリポジトリを使って、AWS環境へデプロイまでやってみます。
やってみた
今回は、CloudShellを使ってデプロイを行います。
手順はREADME.mdにも記載されているので、そちらも併せてご参照ください。
CloudShell の起動
AWSマネジメントコンソールにサインイン後、「shell」などで検索を行い、CloudShell
を起動します。
リポジトリのクローン
上記のリポジトリをCloudShellでクローンします。
git clone https://github.com/aws-samples/dify-self-hosted-on-aws.git
AWS CDK を使ってのデプロイ
各リソースは、AWS CDKを使ってデプロイします。
まずは、dify-self-hosted-on-aws
ディレクトリに移動し、必要なモジュールをインストールします。
cd dify-self-hosted-on-aws/
npm ci
バージニア(us-east-1)で初めてCDKを利用する際には、bootstrap
を実行します。
npx cdk bootstrap
今回は、ランニングコストを抑えた構成を取りたいので、lib/cdk.ts
のコメントアウトを外します。
#!/usr/bin/env node
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { DifyOnAwsStack } from '../lib/dify-on-aws-stack';
const app = new cdk.App();
new DifyOnAwsStack(app, 'DifyOnAwsStack', {
env: {
region: 'us-west-2',
// You need to explicitly set AWS account ID when you look up an existing VPC.
// account: '123456789012'
},
// Allow access from the Internet. Narrow this down if you want further security.
allowedCidrs: ['0.0.0.0/0'],
// Set Dify version
difyImageTag: '0.13.1',
// uncomment the below for cheap configuration:
> isRedisMultiAz: false,
> cheapVpc: true,
> enableAuroraScalesToZero: true,
// Please see DifyOnAwsStackProps in lib/dify-on-aws-stack.ts for all the available properties
});
その後、以下のコマンドを実行して、デプロイを完了させます。
npx cdk deploy
デプロイが完了すると以下のようにアプリケーションのURLが表示されます。
Do you wish to deploy these changes (y/n)? y
DifyOnAwsStack: deploying... [1/1]
DifyOnAwsStack: creating CloudFormation changeset...
✅ DifyOnAwsStack
✨ Deployment time: 1269.82s
Outputs:
DifyOnAwsStack.DifyUrl = http://xxxxxxxxyyyyyyyy.us-west-2.elb.amazonaws.com
Stack ARN:
arn:aws:cloudformation:us-west-2:000000000000:stack/DifyOnAwsStack/xxxxxxxxyyyyyyyy
✨ Total time: 1289.56s
Dify にサインイン
アプリケーションのURLのアクセスします。
アクセス後は、アカウント設定、サインインまで行います。
サインイン後は以下のようなページが開きます。
Amazon Bedrock の有効化
サインイン後、右上のアイコンから設定を開きます。
「モデルプロバイダー」からBedrock
のセットアップを行います。
何も入力なしで「保存」をクリックします。
Bedrockへのアクセスは、IAMを使って許可されているため、アクセスキーの設定は不要です。
Bedrock 有効化後は、利用可能なモデルが確認できます。
動作確認
動作確認のためワークフローを作ってみます。
名前を「bedrock」にして「作成する」をクリックします。
LLMブロックを追加して、Bedrockのモデルを選択します。(今回はNova Pro
としています。)
ワークフロー作成後、「公開する」をクリックし、アプリから動作確認を行います。
input_text
に「AWSとは」と入力し、Execute
をクリックすると、画面右側で生成結果が表示されます。
無事に動作確認できました。
あと片付け
環境を削除する際も、コマンドを実行するだけ完了です。
npx cdk destroy --force
さいごに
SaaS版ではセキュリティ要件を満たせない、カスタマイズをしたいようなケースでは、Dify のセルフホスティングを検討することになりますが、その場合インフラの運用コストなどが発生してしまいます。
今回のアーキテクチャのようにマネージドサービスを活用することで運用コストの削減が期待できます。
また、デプロイ自体もコマンド数回で、お手軽なのでぜひみなさんも試してみてください。